package com.tanhua.server.controller;

import com.tanhua.domain.db.UserInfo;
import com.tanhua.server.service.UserService;
import jdk.nashorn.internal.parser.Token;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.Map;

/**
 * 实际开发中，要给客户端返回的响应数据，按照规范应该有：
 *   响应状态码：200， 500, ...
 *   附加响应头：
 *   响应正文内容：要返回的数据
 * SpringBoot提供了一个对象：ResponseEntity，专门用于封装响应结果的
 *   如果没有异常，就返回  ResponseEntity.ok(响应体内容);
 *   如果有异常，就返回   ResponseEntity.status(500).body(错误信息对象)
 *      错误信息对象： ErrorResult.error()，表示服务端错误
 *                    ErrorResult.smsSendFailed()，表示发送短信验证码失败
 * @author anshuai
 * @create 2021-01-24 15:50
 */
@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserService userService;

    /**
     * 登录注册 发送短信验证码
     * POST /user/login
     */
    @PostMapping("/login")
    public ResponseEntity loginSendSms(@RequestBody Map map){

        //获取手机号参数
        String mobile = (String) map.get("phone");
        return userService.sendSms(mobile);
    }

    /**
     * 登录注册-校验验证码，然后登录/注册
     * POST /user/loginVerification
     */
    @PostMapping("/loginVerification")
    public ResponseEntity loginVerification(@RequestBody Map map){

        //获取参数phone
        String mobile = (String) map.get("phone");
        //获取参数verificationCode(验证码)
        String verificationCode = (String) map.get("verificationCode");

        return userService.loginVerification(mobile,verificationCode);
    }

    /**
     * 手机号登录-完善用户信息
     * POST /user/loginReginfo
     */
    @PostMapping("/loginReginfo")
    public ResponseEntity loginReginfo(@RequestBody UserInfo userInfo){
        return userService.saveUserInfo(userInfo);
    }

    /**
     * 登录注册-完善个人资料-上传头像
     * POST /user/loginReginfo/head
     */
    @PostMapping("loginReginfo/head")
    public ResponseEntity saveAvatar(MultipartFile headPhoto) throws IOException {

        return userService.saveAvatar(headPhoto);
    }

}
